// 1. 引入模块
const mongoose = require('mongoose');

// 2. 连接数据库
const str = 'mongodb://127.0.0.1:27017/chenwei';
mongoose.connect(str, { useNewUrlParser: true });

// 3. 注册事件
mongoose.connection.on('open', () => {

    // 4. 创建文档结构对象
    // 可以一眼知道关于这个对象的字段有哪些描述(类似于表结构中的表头)
    // Schema  [ˈskimə]  关于一个集合的字段描述
    const Stars = mongoose.Schema({
        name: String,
        age: Number,
        hobby: Array,
        isMarry: Boolean,
        brith: Date
    })

    // 5. 创建真实的模型对象 - Model  一般代表数据的意思
    const StarsModel = mongoose.model('popstar', Stars);

    // 6. 查询数据
    // 6.1 排序 - 链式方式操作
    // sort 排序的规则，字段 1 表示以此字段做排序  1 从小到大(升序)，-1 从大到小(降序)
    // exec 提取的方法 - 回调函数
    // StarsModel.find().sort({ age: -1 }).exec((err, data) => {
    //     if (err) throw err;

    //     console.log('查询成功：', data);
    //     mongoose.connection.close();
    // })

    // 6.2 筛选部分属性 - 字段写1代表需要展示，0不展示
    // const filter = { name: 1, age: 1, hobby: 1, isMarry: 1, _id: 0 };
    // StarsModel.find().select(filter).exec((err, data) => {
    //     if (err) throw err;
    //     console.log('查询成功：', data);
    //     mongoose.connection.close();
    // })

    // 6.3 截取数据
    // 设置起始位置
    // StarsModel.find().skip(3).exec((err, data) => {
    //     if (err) throw err;
    //     console.log('查询成功：', data);
    //     mongoose.connection.close();
    // })
    // 设置获取的数量
    // StarsModel.find().limit(2).exec((err, data) => {
    //     if (err) throw err;
    //     console.log('查询成功：', data);
    //     mongoose.connection.close();
    // })
    // 设置获取的区间 - 起始1，截取2，筛选3，排序4
    // 逻辑关系: 3筛选 - 4排序 - 1起始 - 2截取
    const fil = { name: 1, age: 1, _id: 0 };
    // StarsModel
    //     .find()
    //     .sort({ age: -1 })
    //     .select(fil)
    //     .skip(2)
    //     .limit(2)
    //     .exec((err, data) => {
    //         if (err) throw err;
    //         console.log('查询成功：', data);
    //         mongoose.connection.close();
    //     })

    // 分页逻辑   pageNum 当前第几页    pageSize  每页展示的数据 8
    // skip((pageNum - 1) * pageSize).limit(pageSize)


    // 模糊查询
    const str = '娜'; // req.body.name;
    const reg = new RegExp(str, 'ig');
    // i 忽略大小写， g 开启全局匹配
    StarsModel.find({ name: reg }).select(fil).exec((err, data) => {
        if (err) throw err;
        console.log('查询成功：', data);
        mongoose.connection.close();
    })

})
// 处理失败的事件
mongoose.connection.on('error', () => {

})